package com.itfreer.data.general.domain;

import com.itfreer.data.general.IDomainInfo;
import com.itfreer.data.general.RowBase;
import com.itfreer.utils.TreeNode;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 定义字典操作接口
 */
public interface IDomain extends IDomainInfo {

	/**
	 * 节点id
	 */
	public final static String ID = "DOMAINID";

	/**
	 * 父节点id
	 */
	public final static String PID = "PDOMAINID";

	/**
	 * 代码值
	 */
	public final static String DOMAINCODE = "DOMAINCODE";

	/**
	 * 字典域显示值
	 */
	public final static String DOMAINCAPTION = "DOMAINCAPTION";

	/**
	 * 排序字段
	 */
	public final static String ORDER = "ORDER";

	/**
	 * 级别
	 */
	public final static String JB = "JB";

	/**
	 * 是否为叶子节点
	 */
	public final static String ISCHILD = "ISCHILD";

	/**
	 * 字典域名称
	 */
	public final static String DOMAINNAME = "DOMAINNAME";

	/**
	 * 字典表的是否使用字段名称
	 */
	public final static String ISUSER = "ISUSER";

	/**
	 * 字典表的是否可编辑字段名称
	 */
	public final static String ISEDIT = "ISEDIT";

	/**
	 * 字典表的单位
	 */
	public final static String UNIT = "UNIT";

	/**
	 * 获取字典域别名，用于显示
	 * 
	 * @return
	 */
	String getDomainAliasName();

	/**
	 * 获取代码值，此值主要用于代码翻译
	 */
	HashMap<String, String> getDomains();

	/**
	 * 获取代码值，此值主要用于代码翻译，包括单位的翻译
	 */
	HashMap<String, String[]> getDomainsEx();

	/**
	 * 获取所有的记录数 主要用于数据绑定
	 */
	List<RowBase> getDatas();

	/**
	 * 获取所有数据，并转换成可绑定的数据对象
	 * 
	 * @return
	 */
	List<TreeNode> getDatasEx();

	/**
	 * 获取所有数据，并转换成可绑定到TreeGrid的数据对象
	 * 
	 * @param 是否转换为标准字段
	 * @return
	 */
	List<Map<String, Object>> getDatasEx2(boolean convertStaticField);

	/**
	 * 获取带权限过滤的数据，并转换成可绑定的数据对象
	 * 
	 * @return
	 */
	List<TreeNode> getDatasEx(HashMap<String, Object> filterMap,
                              String extKey, String extVal);

	/**
	 * 获取过滤的数据，并转换成可绑定的数据对象
	 * 
	 * @return
	 */
	List<TreeNode> getDatasEx(HashMap<String, Object> filterMap);

	/**
	 * 获取下级数据对象
	 * 
	 * @param id
	 * @return
	 */
	List<RowBase> getNextDatas(String id);

	/**
	 * 获取下级数据对象，并转换成可绑定对象
	 * 
	 * @param id
	 * @return
	 */
	List<TreeNode> getNextDatasEx(String id);
}